package SpiderController;

##########################
#     OmnibusProxy       #
#    Krzysztof Ulman     #
# Politechnika Krakowska #
#      Kraków 2012       #
##########################

use strict;
use warnings;
use encoding 'utf8';
use utf8;

#sekundy, czas zwloki pomiedzy kolejnymi requestami
our $INTERVAL;

#sekundy, czas zwloki ustawiony raz na N zapytan
our $BIG_INTERVAL;

#co ile zapytan robic duza przerwe
our $SPIDER_N;

#czas pobrania poprzedniej strony
my $lastAccessTime;

#licznik pobranych stron
my $pageCounter;

#konstruktor
#klasa odpowiedzialna za zarzadzanie przerwami pomiedzy poszczegolnymi zapytaniami
sub new {
	shift;
	my $self = {};
	bless $self;
	
	#poczatkowa wartosc przerwy
	$INTERVAL = 5; #sekund
	$BIG_INTERVAL = 10; #sekund
	$SPIDER_N = 30; #zapytan
	
	$self->{pageCounter} = 0;
	$self->{lastAccessTime} = time - $INTERVAL;
	
	#zainicjowanie ziarna do losowania
	srand(time); 
	
	return $self;
}

#zarzadza przerwa pomiedzy kolejnymi zapytaniami
sub doInterval {
	my $self = shift;
	my $pageCounter = $self->{pageCounter}++;
	my $lastAccessTime = $self->{lastAccessTime};
	
	#obliczenie liczby sekund od ostatniego zapytania
	my $diff = time - $lastAccessTime;	
	if($diff < $INTERVAL) {
		sleep(int(rand(2 * $INTERVAL)));
	}
	
	#dluzsza przerwa raz na SPIDER_N zapytan
	if($pageCounter >= $SPIDER_N) {
		$self->{pageCounter} = 0;
		sleep(int(rand(2 * $BIG_INTERVAL)));
	}
	
	#zapisanie nowego czasu
	$self->{lastAccessTime} = time;
}

#zwraca proxy, przez ktore mamy sie laczyc
sub getProxy {
	#TODO impl
}

#sprawdza, czy proxy dziala prawidlowo
sub private_testProxy {
	#TODO whatismyip.com
}

1;